CREATE SEQUENCE DTGK.SEQ_XSBH
    INCREMENT BY 1
    START WITH 1
    MAXVALUE 9999
    MINVALUE 1
    NOCYCLE
    CACHE 20;


--
CREATE OR REPLACE PROCEDURE "DTGK"."RESET_SEQ_XSBH"
AUTHID DEFINER

AS
    v_current_val NUMBER;
BEGIN
    -- 获取当前序列值
EXECUTE IMMEDIATE 'SELECT DTGK.SEQ_XSBH.NEXTVAL FROM DUAL' INTO v_current_val;

-- 计算需要减少的值
EXECUTE IMMEDIATE 'ALTER SEQUENCE DTGK.SEQ_XSBH INCREMENT BY -' || (v_current_val-1);

-- 获取下一个值使序列回到1
EXECUTE IMMEDIATE 'SELECT DTGK.SEQ_XSBH.NEXTVAL FROM DUAL' INTO v_current_val;

-- 恢复原始增量值
EXECUTE IMMEDIATE 'ALTER SEQUENCE DTGK.SEQ_XSBH INCREMENT BY 1';

COMMIT;
DBMS_OUTPUT.PUT_LINE('序列已重置为1');
EXCEPTION
    WHEN OTHERS THEN
        ROLLBACK;
        DBMS_OUTPUT.PUT_LINE('重置序列失败: ' || SQLERRM);
        -- 确保恢复增量值
BEGIN
EXECUTE IMMEDIATE 'ALTER SEQUENCE DTGK.SEQ_XSBH INCREMENT BY 1';
EXCEPTION
            WHEN OTHERS THEN NULL;
END;
        RAISE;
END;


SP_INIT_JOB_SYS(1);
COMMIT;


GRANT EXECUTE ON DBMS_JOB TO DTGK;
COMMIT;

DECLARE
job_id INTEGER;
BEGIN
    -- 使用双引号包裹 SUBMIT（因为是保留字）
    "DBMS_JOB"."SUBMIT"(
        job_id,                                 -- OUT: 返回任务 ID
        'DTGK.RESET_SEQ_XSBH();',               -- 要执行的 PL/SQL 语句（必须带分号）
        TRUNC(SYSDATE + 1),                     -- next_date: 明天凌晨 00:00:00
        'TRUNC(SYSDATE + 1)',                   -- interval: 每天执行一次
        FALSE,                                  -- no_parse: FALSE=立即语法分析
        0,                                      -- instance: 单机环境为0
        FALSE                                   -- force: 兼容参数，无实际作用
    );
    -- 输出任务 ID
    DBMS_OUTPUT.PUT_LINE('✅ 定时任务创建成功，Job ID: ' || job_id);
END;
/

-- 🚨 必须提交，否则任务不会持久化
COMMIT;











